/**
 * ajax 全局事件，可在使用 ajax 时，使用 global:false 来不触发全局事件，
 * 全局事件中，除了ajaxStart和ajaxStop之外，其他的事件都有3个参数：event, XMLHttpRequest, ajaxOptions
 * 对于ajaxError,还有第四个参数thrownError，只有当异常发生时才会被传递。
 */
layui.define(['jquery', 'layer'], function (exports) {
    var $ = layui.$;
    var layer = layui.layer;

    var BmsAjax = function () {
    }

    var call = {
        checkCode: function (status, resp) {
            if (200 != status) {
                call.errCode(status);
                return false;
            }

            var data;
            try {
                data = JSON.parse(resp);
            } catch (e) {
            }

            if (!data)
                return true;

           if (data[BMS.config.keys.codeName] != BMS.config.code.succ)
               call.errCode(data.code, data.msg);

           return false;
        }
        , errCode: function(code, msg)
        {
            switch (code) {
                case BMS.config.code.timeout: //login
                    parent.layer.alert('会话已过期，请重新登录！', {icon: 4}, function () {
                        window.location.href = BMS.config.urls.login;
                    });
                    break;
                case BMS.config.code.err :
                    parent.layer.msg(msg || '对不起，发生未知错误！', {time: 2000, offset:'t', icon: 5})
                    break;
                case 401:
                case 403: // 无权
                    // icon 0 叹号
                    // icon 1 对
                    // icon 2 叉
                    // icon 3 问号
                    // icon 4 锁
                    // icon 5 哭脸
                    // icon 6 笑
                    parent.layer.msg('对不起，您无权访问！', {time: 2000, offset:'t', icon: 4});
                    break;
                default:
                    parent.layer.msg(msg || '对不起，发生未知错误！', {time: 2000, offset:'t', icon: 5})

            }
        }
    }

    //初始化元素操作
    BmsAjax.prototype.init = function () {
        var items = {
            init: function (options) {
                /**
                 * ajax 开始，排序 1
                 */
                $(document).ajaxStart(function () {

                });

                /**
                 * ajax 发送，排序 2
                 */
                $(document).ajaxSend(function (e, xreq, opts) {

                })

                /**
                 * ajax 成功，排序 3
                 */
                $(document).ajaxSuccess(function (e, xreq, opts, resp) {



                    call.checkCode(xreq.status, resp);
                })

                /**
                 * ajax 错误，排序 3
                 * HTTP 返回状态错误码，触发该事件
                 */
                $(document).ajaxError(function (e, xreq, opts, err) {


                    call.checkCode(xreq.status, xreq.resp);
                })

                /**
                 * ajax 完成，排序 4
                 */
                $(document).ajaxComplete(function (e, xreq, opts) {

                })

                /**
                 * ajax 停止，排序 5
                 */
                $(document).ajaxStop(function () {

                })

                var BmsAjax = function () {
                }
            }
        };
        return layui.each(items, function (index, item) {
            item();
        });
    }

    var bmsAjax = new BmsAjax();
    bmsAjax.init();

    exports('bmsajax', bmsAjax);
})